grammar Ol;

options {
	superClass = OlANTLRParserBase;
	backtrack = true;
	memoize = true;
}

@lexer::header {
	package OrchestrationLanguage.resource.ol.mopp;
}

@lexer::members {
	public java.util.List<org.antlr.runtime3_3_0.RecognitionException> lexerExceptions  = new java.util.ArrayList<org.antlr.runtime3_3_0.RecognitionException>();
	public java.util.List<Integer> lexerExceptionsPosition = new java.util.ArrayList<Integer>();
	
	public void reportError(org.antlr.runtime3_3_0.RecognitionException e) {
		lexerExceptions.add(e);
		lexerExceptionsPosition.add(((org.antlr.runtime3_3_0.ANTLRStringStream) input).index());
	}
}
@header{
	package OrchestrationLanguage.resource.ol.mopp;
}

@members{
	private OrchestrationLanguage.resource.ol.IOlTokenResolverFactory tokenResolverFactory = new OrchestrationLanguage.resource.ol.mopp.OlTokenResolverFactory();
	
	/**
	 * the index of the last token that was handled by collectHiddenTokens()
	 */
	private int lastPosition;
	
	/**
	 * A flag that indicates whether the parser should remember all expected elements.
	 * This flag is set to true when using the parse for code completion. Otherwise it
	 * is set to false.
	 */
	private boolean rememberExpectedElements = false;
	
	private Object parseToIndexTypeObject;
	private int lastTokenIndex = 0;
	
	/**
	 * A list of expected elements the were collected while parsing the input stream.
	 * This list is only filled if <code>rememberExpectedElements</code> is set to
	 * true.
	 */
	private java.util.List<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal> expectedElements = new java.util.ArrayList<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal>();
	
	private int mismatchedTokenRecoveryTries = 0;
	/**
	 * A helper list to allow a lexer to pass errors to its parser
	 */
	protected java.util.List<org.antlr.runtime3_3_0.RecognitionException> lexerExceptions = java.util.Collections.synchronizedList(new java.util.ArrayList<org.antlr.runtime3_3_0.RecognitionException>());
	
	/**
	 * Another helper list to allow a lexer to pass positions of errors to its parser
	 */
	protected java.util.List<Integer> lexerExceptionsPosition = java.util.Collections.synchronizedList(new java.util.ArrayList<Integer>());
	
	/**
	 * A stack for incomplete objects. This stack is used filled when the parser is
	 * used for code completion. Whenever the parser starts to read an object it is
	 * pushed on the stack. Once the element was parser completely it is popped from
	 * the stack.
	 */
	protected java.util.Stack<org.eclipse.emf.ecore.EObject> incompleteObjects = new java.util.Stack<org.eclipse.emf.ecore.EObject>();
	
	private int stopIncludingHiddenTokens;
	private int stopExcludingHiddenTokens;
	private int tokenIndexOfLastCompleteElement;
	
	private int expectedElementsIndexOfLastCompleteElement;
	
	/**
	 * The offset indicating the cursor position when the parser is used for code
	 * completion by calling parseToExpectedElements().
	 */
	private int cursorOffset;
	
	/**
	 * The offset of the first hidden token of the last expected element. This offset
	 * is used to discard expected elements, which are not needed for code completion.
	 */
	private int lastStartIncludingHidden;
	
	protected void addErrorToResource(final String errorMessage, final int column, final int line, final int startIndex, final int stopIndex) {
		postParseCommands.add(new OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>() {
			public boolean execute(OrchestrationLanguage.resource.ol.IOlTextResource resource) {
				if (resource == null) {
					// the resource can be null if the parser is used for code completion
					return true;
				}
				resource.addProblem(new OrchestrationLanguage.resource.ol.IOlProblem() {
					public OrchestrationLanguage.resource.ol.OlEProblemSeverity getSeverity() {
						return OrchestrationLanguage.resource.ol.OlEProblemSeverity.ERROR;
					}
					public OrchestrationLanguage.resource.ol.OlEProblemType getType() {
						return OrchestrationLanguage.resource.ol.OlEProblemType.SYNTAX_ERROR;
					}
					public String getMessage() {
						return errorMessage;
					}
					public java.util.Collection<OrchestrationLanguage.resource.ol.IOlQuickFix> getQuickFixes() {
						return null;
					}
				}, column, line, startIndex, stopIndex);
				return true;
			}
		});
	}
	
	public void addExpectedElement(OrchestrationLanguage.resource.ol.IOlExpectedElement terminal, int followSetID, org.eclipse.emf.ecore.EStructuralFeature... containmentTrace) {
		if (!this.rememberExpectedElements) {
			return;
		}
		OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal expectedElement = new OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal(terminal, followSetID, containmentTrace);
		setPosition(expectedElement, input.index());
		int startIncludingHiddenTokens = expectedElement.getStartIncludingHiddenTokens();
		if (lastStartIncludingHidden >= 0 && lastStartIncludingHidden < startIncludingHiddenTokens && cursorOffset > startIncludingHiddenTokens) {
			// clear list of expected elements
			this.expectedElements.clear();
		}
		lastStartIncludingHidden = startIncludingHiddenTokens;
		this.expectedElements.add(expectedElement);
	}
	
	protected void collectHiddenTokens(org.eclipse.emf.ecore.EObject element) {
	}
	
	protected void copyLocalizationInfos(final org.eclipse.emf.ecore.EObject source, final org.eclipse.emf.ecore.EObject target) {
		postParseCommands.add(new OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>() {
			public boolean execute(OrchestrationLanguage.resource.ol.IOlTextResource resource) {
				OrchestrationLanguage.resource.ol.IOlLocationMap locationMap = resource.getLocationMap();
				if (locationMap == null) {
					// the locationMap can be null if the parser is used for code completion
					return true;
				}
				locationMap.setCharStart(target, locationMap.getCharStart(source));
				locationMap.setCharEnd(target, locationMap.getCharEnd(source));
				locationMap.setColumn(target, locationMap.getColumn(source));
				locationMap.setLine(target, locationMap.getLine(source));
				return true;
			}
		});
	}
	
	protected void copyLocalizationInfos(final org.antlr.runtime3_3_0.CommonToken source, final org.eclipse.emf.ecore.EObject target) {
		postParseCommands.add(new OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>() {
			public boolean execute(OrchestrationLanguage.resource.ol.IOlTextResource resource) {
				OrchestrationLanguage.resource.ol.IOlLocationMap locationMap = resource.getLocationMap();
				if (locationMap == null) {
					// the locationMap can be null if the parser is used for code completion
					return true;
				}
				if (source == null) {
					return true;
				}
				locationMap.setCharStart(target, source.getStartIndex());
				locationMap.setCharEnd(target, source.getStopIndex());
				locationMap.setColumn(target, source.getCharPositionInLine());
				locationMap.setLine(target, source.getLine());
				return true;
			}
		});
	}
	
	/**
	 * Sets the end character index and the last line for the given object in the
	 * location map.
	 */
	protected void setLocalizationEnd(java.util.Collection<OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>> postParseCommands , final org.eclipse.emf.ecore.EObject object, final int endChar, final int endLine) {
		postParseCommands.add(new OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>() {
			public boolean execute(OrchestrationLanguage.resource.ol.IOlTextResource resource) {
				OrchestrationLanguage.resource.ol.IOlLocationMap locationMap = resource.getLocationMap();
				if (locationMap == null) {
					// the locationMap can be null if the parser is used for code completion
					return true;
				}
				locationMap.setCharEnd(object, endChar);
				locationMap.setLine(object, endLine);
				return true;
			}
		});
	}
	
	public OrchestrationLanguage.resource.ol.IOlTextParser createInstance(java.io.InputStream actualInputStream, String encoding) {
		try {
			if (encoding == null) {
				return new OlParser(new org.antlr.runtime3_3_0.CommonTokenStream(new OlLexer(new org.antlr.runtime3_3_0.ANTLRInputStream(actualInputStream))));
			} else {
				return new OlParser(new org.antlr.runtime3_3_0.CommonTokenStream(new OlLexer(new org.antlr.runtime3_3_0.ANTLRInputStream(actualInputStream, encoding))));
			}
		} catch (java.io.IOException e) {
			OrchestrationLanguage.resource.ol.mopp.OlPlugin.logError("Error while creating parser.", e);
			return null;
		}
	}
	
	/**
	 * This default constructor is only used to call createInstance() on it.
	 */
	public OlParser() {
		super(null);
	}
	
	protected org.eclipse.emf.ecore.EObject doParse() throws org.antlr.runtime3_3_0.RecognitionException {
		this.lastPosition = 0;
		// required because the lexer class can not be subclassed
		((OlLexer) getTokenStream().getTokenSource()).lexerExceptions = lexerExceptions;
		((OlLexer) getTokenStream().getTokenSource()).lexerExceptionsPosition = lexerExceptionsPosition;
		Object typeObject = getTypeObject();
		if (typeObject == null) {
			return start();
		} else if (typeObject instanceof org.eclipse.emf.ecore.EClass) {
			org.eclipse.emf.ecore.EClass type = (org.eclipse.emf.ecore.EClass) typeObject;
			if (type.getInstanceClass() == OrchestrationLanguage.Variable_Assignment.class) {
				return parse_OrchestrationLanguage_Variable_005fAssignment();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Variable_Declaration.class) {
				return parse_OrchestrationLanguage_Variable_005fDeclaration();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Variable.class) {
				return parse_OrchestrationLanguage_Variable();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Modules.class) {
				return parse_OrchestrationLanguage_Modules();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Module.class) {
				return parse_OrchestrationLanguage_Module();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Import.class) {
				return parse_OrchestrationLanguage_Import();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.ExternalServices.class) {
				return parse_OrchestrationLanguage_ExternalServices();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.InternalServices.class) {
				return parse_OrchestrationLanguage_InternalServices();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Main.class) {
				return parse_OrchestrationLanguage_Main();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Process.class) {
				return parse_OrchestrationLanguage_Process();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.InternalProcess.class) {
				return parse_OrchestrationLanguage_InternalProcess();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Call.class) {
				return parse_OrchestrationLanguage_Call();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Argument.class) {
				return parse_OrchestrationLanguage_Argument();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.If.class) {
				return parse_OrchestrationLanguage_If();
			}
			if (type.getInstanceClass() == OrchestrationLanguage.Else.class) {
				return parse_OrchestrationLanguage_Else();
			}
		}
		throw new OrchestrationLanguage.resource.ol.mopp.OlUnexpectedContentTypeException(typeObject);
	}
	
	public int getMismatchedTokenRecoveryTries() {
		return mismatchedTokenRecoveryTries;
	}
	
	public Object getMissingSymbol(org.antlr.runtime3_3_0.IntStream arg0, org.antlr.runtime3_3_0.RecognitionException arg1, int arg2, org.antlr.runtime3_3_0.BitSet arg3) {
		mismatchedTokenRecoveryTries++;
		return super.getMissingSymbol(arg0, arg1, arg2, arg3);
	}
	
	public Object getParseToIndexTypeObject() {
		return parseToIndexTypeObject;
	}
	
	protected Object getTypeObject() {
		Object typeObject = getParseToIndexTypeObject();
		if (typeObject != null) {
			return typeObject;
		}
		java.util.Map<?,?> options = getOptions();
		if (options != null) {
			typeObject = options.get(OrchestrationLanguage.resource.ol.IOlOptions.RESOURCE_CONTENT_TYPE);
		}
		return typeObject;
	}
	
	/**
	 * Implementation that calls {@link #doParse()} and handles the thrown
	 * RecognitionExceptions.
	 */
	public OrchestrationLanguage.resource.ol.IOlParseResult parse() {
		terminateParsing = false;
		postParseCommands = new java.util.ArrayList<OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource>>();
		OrchestrationLanguage.resource.ol.mopp.OlParseResult parseResult = new OrchestrationLanguage.resource.ol.mopp.OlParseResult();
		try {
			org.eclipse.emf.ecore.EObject result =  doParse();
			if (lexerExceptions.isEmpty()) {
				parseResult.setRoot(result);
			}
		} catch (org.antlr.runtime3_3_0.RecognitionException re) {
			reportError(re);
		} catch (java.lang.IllegalArgumentException iae) {
			if ("The 'no null' constraint is violated".equals(iae.getMessage())) {
				// can be caused if a null is set on EMF models where not allowed. this will just
				// happen if other errors occurred before
			} else {
				iae.printStackTrace();
			}
		}
		for (org.antlr.runtime3_3_0.RecognitionException re : lexerExceptions) {
			reportLexicalError(re);
		}
		parseResult.getPostParseCommands().addAll(postParseCommands);
		return parseResult;
	}
	
	public java.util.List<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal> parseToExpectedElements(org.eclipse.emf.ecore.EClass type, OrchestrationLanguage.resource.ol.IOlTextResource dummyResource, int cursorOffset) {
		this.rememberExpectedElements = true;
		this.parseToIndexTypeObject = type;
		this.cursorOffset = cursorOffset;
		this.lastStartIncludingHidden = -1;
		final org.antlr.runtime3_3_0.CommonTokenStream tokenStream = (org.antlr.runtime3_3_0.CommonTokenStream) getTokenStream();
		OrchestrationLanguage.resource.ol.IOlParseResult result = parse();
		for (org.eclipse.emf.ecore.EObject incompleteObject : incompleteObjects) {
			org.antlr.runtime3_3_0.Lexer lexer = (org.antlr.runtime3_3_0.Lexer) tokenStream.getTokenSource();
			int endChar = lexer.getCharIndex();
			int endLine = lexer.getLine();
			setLocalizationEnd(result.getPostParseCommands(), incompleteObject, endChar, endLine);
		}
		if (result != null) {
			org.eclipse.emf.ecore.EObject root = result.getRoot();
			if (root != null) {
				dummyResource.getContentsInternal().add(root);
			}
			for (OrchestrationLanguage.resource.ol.IOlCommand<OrchestrationLanguage.resource.ol.IOlTextResource> command : result.getPostParseCommands()) {
				command.execute(dummyResource);
			}
		}
		// remove all expected elements that were added after the last complete element
		expectedElements = expectedElements.subList(0, expectedElementsIndexOfLastCompleteElement + 1);
		int lastFollowSetID = expectedElements.get(expectedElementsIndexOfLastCompleteElement).getFollowSetID();
		java.util.Set<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal> currentFollowSet = new java.util.LinkedHashSet<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal>();
		java.util.List<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal> newFollowSet = new java.util.ArrayList<OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal>();
		for (int i = expectedElementsIndexOfLastCompleteElement; i >= 0; i--) {
			OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal expectedElementI = expectedElements.get(i);
			if (expectedElementI.getFollowSetID() == lastFollowSetID) {
				currentFollowSet.add(expectedElementI);
			} else {
				break;
			}
		}
		int followSetID = 83;
		int i;
		for (i = tokenIndexOfLastCompleteElement; i < tokenStream.size(); i++) {
			org.antlr.runtime3_3_0.CommonToken nextToken = (org.antlr.runtime3_3_0.CommonToken) tokenStream.get(i);
			if (nextToken.getType() < 0) {
				break;
			}
			if (nextToken.getChannel() == 99) {
				// hidden tokens do not reduce the follow set
			} else {
				// now that we have found the next visible token the position for that expected
				// terminals can be set
				for (OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal nextFollow : newFollowSet) {
					lastTokenIndex = 0;
					setPosition(nextFollow, i);
				}
				newFollowSet.clear();
				// normal tokens do reduce the follow set - only elements that match the token are
				// kept
				for (OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal nextFollow : currentFollowSet) {
					if (nextFollow.getTerminal().getTokenNames().contains(getTokenNames()[nextToken.getType()])) {
						// keep this one - it matches
						java.util.Collection<OrchestrationLanguage.resource.ol.util.OlPair<OrchestrationLanguage.resource.ol.IOlExpectedElement, org.eclipse.emf.ecore.EStructuralFeature[]>> newFollowers = nextFollow.getTerminal().getFollowers();
						for (OrchestrationLanguage.resource.ol.util.OlPair<OrchestrationLanguage.resource.ol.IOlExpectedElement, org.eclipse.emf.ecore.EStructuralFeature[]> newFollowerPair : newFollowers) {
							OrchestrationLanguage.resource.ol.IOlExpectedElement newFollower = newFollowerPair.getLeft();
							OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal newFollowTerminal = new OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal(newFollower, followSetID, newFollowerPair.getRight());
							newFollowSet.add(newFollowTerminal);
							expectedElements.add(newFollowTerminal);
						}
					}
				}
				currentFollowSet.clear();
				currentFollowSet.addAll(newFollowSet);
			}
			followSetID++;
		}
		// after the last token in the stream we must set the position for the elements
		// that were added during the last iteration of the loop
		for (OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal nextFollow : newFollowSet) {
			lastTokenIndex = 0;
			setPosition(nextFollow, i);
		}
		return this.expectedElements;
	}
	
	public void setPosition(OrchestrationLanguage.resource.ol.mopp.OlExpectedTerminal expectedElement, int tokenIndex) {
		int currentIndex = Math.max(0, tokenIndex);
		for (int index = lastTokenIndex; index < currentIndex; index++) {
			if (index >= input.size()) {
				break;
			}
			org.antlr.runtime3_3_0.CommonToken tokenAtIndex = (org.antlr.runtime3_3_0.CommonToken) input.get(index);
			stopIncludingHiddenTokens = tokenAtIndex.getStopIndex() + 1;
			if (tokenAtIndex.getChannel() != 99) {
				stopExcludingHiddenTokens = tokenAtIndex.getStopIndex() + 1;
			}
		}
		lastTokenIndex = Math.max(0, currentIndex);
		expectedElement.setPosition(stopExcludingHiddenTokens, stopIncludingHiddenTokens);
	}
	
	public Object recoverFromMismatchedToken(org.antlr.runtime3_3_0.IntStream input, int ttype, org.antlr.runtime3_3_0.BitSet follow) throws org.antlr.runtime3_3_0.RecognitionException {
		if (!rememberExpectedElements) {
			return super.recoverFromMismatchedToken(input, ttype, follow);
		} else {
			return null;
		}
	}
	
	/**
	 * Translates errors thrown by the parser into human readable messages.
	 */
	public void reportError(final org.antlr.runtime3_3_0.RecognitionException e)  {
		String message = e.getMessage();
		if (e instanceof org.antlr.runtime3_3_0.MismatchedTokenException) {
			org.antlr.runtime3_3_0.MismatchedTokenException mte = (org.antlr.runtime3_3_0.MismatchedTokenException) e;
			String expectedTokenName = formatTokenName(mte.expecting);
			String actualTokenName = formatTokenName(e.token.getType());
			message = "Syntax error on token \"" + e.token.getText() + " (" + actualTokenName + ")\", \"" + expectedTokenName + "\" expected";
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedTreeNodeException) {
			org.antlr.runtime3_3_0.MismatchedTreeNodeException mtne = (org.antlr.runtime3_3_0.MismatchedTreeNodeException) e;
			String expectedTokenName = formatTokenName(mtne.expecting);
			message = "mismatched tree node: " + "xxx" + "; tokenName " + expectedTokenName;
		} else if (e instanceof org.antlr.runtime3_3_0.NoViableAltException) {
			message = "Syntax error on token \"" + e.token.getText() + "\", check following tokens";
		} else if (e instanceof org.antlr.runtime3_3_0.EarlyExitException) {
			message = "Syntax error on token \"" + e.token.getText() + "\", delete this token";
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedSetException) {
			org.antlr.runtime3_3_0.MismatchedSetException mse = (org.antlr.runtime3_3_0.MismatchedSetException) e;
			message = "mismatched token: " + e.token + "; expecting set " + mse.expecting;
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedNotSetException) {
			org.antlr.runtime3_3_0.MismatchedNotSetException mse = (org.antlr.runtime3_3_0.MismatchedNotSetException) e;
			message = "mismatched token: " +  e.token + "; expecting set " + mse.expecting;
		} else if (e instanceof org.antlr.runtime3_3_0.FailedPredicateException) {
			org.antlr.runtime3_3_0.FailedPredicateException fpe = (org.antlr.runtime3_3_0.FailedPredicateException) e;
			message = "rule " + fpe.ruleName + " failed predicate: {" +  fpe.predicateText + "}?";
		}
		// the resource may be null if the parser is used for code completion
		final String finalMessage = message;
		if (e.token instanceof org.antlr.runtime3_3_0.CommonToken) {
			final org.antlr.runtime3_3_0.CommonToken ct = (org.antlr.runtime3_3_0.CommonToken) e.token;
			addErrorToResource(finalMessage, ct.getCharPositionInLine(), ct.getLine(), ct.getStartIndex(), ct.getStopIndex());
		} else {
			addErrorToResource(finalMessage, e.token.getCharPositionInLine(), e.token.getLine(), 1, 5);
		}
	}
	
	/**
	 * Translates errors thrown by the lexer into human readable messages.
	 */
	public void reportLexicalError(final org.antlr.runtime3_3_0.RecognitionException e)  {
		String message = "";
		if (e instanceof org.antlr.runtime3_3_0.MismatchedTokenException) {
			org.antlr.runtime3_3_0.MismatchedTokenException mte = (org.antlr.runtime3_3_0.MismatchedTokenException) e;
			message = "Syntax error on token \"" + ((char) e.c) + "\", \"" + (char) mte.expecting + "\" expected";
		} else if (e instanceof org.antlr.runtime3_3_0.NoViableAltException) {
			message = "Syntax error on token \"" + ((char) e.c) + "\", delete this token";
		} else if (e instanceof org.antlr.runtime3_3_0.EarlyExitException) {
			org.antlr.runtime3_3_0.EarlyExitException eee = (org.antlr.runtime3_3_0.EarlyExitException) e;
			message = "required (...)+ loop (decision=" + eee.decisionNumber + ") did not match anything; on line " + e.line + ":" + e.charPositionInLine + " char=" + ((char) e.c) + "'";
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedSetException) {
			org.antlr.runtime3_3_0.MismatchedSetException mse = (org.antlr.runtime3_3_0.MismatchedSetException) e;
			message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set " + mse.expecting;
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedNotSetException) {
			org.antlr.runtime3_3_0.MismatchedNotSetException mse = (org.antlr.runtime3_3_0.MismatchedNotSetException) e;
			message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set " + mse.expecting;
		} else if (e instanceof org.antlr.runtime3_3_0.MismatchedRangeException) {
			org.antlr.runtime3_3_0.MismatchedRangeException mre = (org.antlr.runtime3_3_0.MismatchedRangeException) e;
			message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set '" + (char) mre.a + "'..'" + (char) mre.b + "'";
		} else if (e instanceof org.antlr.runtime3_3_0.FailedPredicateException) {
			org.antlr.runtime3_3_0.FailedPredicateException fpe = (org.antlr.runtime3_3_0.FailedPredicateException) e;
			message = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?";
		}
		addErrorToResource(message, e.charPositionInLine, e.line, lexerExceptionsPosition.get(lexerExceptions.indexOf(e)), lexerExceptionsPosition.get(lexerExceptions.indexOf(e)));
	}
	
	protected void completedElement(Object object, boolean isContainment) {
		if (isContainment && !this.incompleteObjects.isEmpty()) {
			this.incompleteObjects.pop();
		}
		if (object instanceof org.eclipse.emf.ecore.EObject) {
			this.tokenIndexOfLastCompleteElement = getTokenStream().index();
			this.expectedElementsIndexOfLastCompleteElement = expectedElements.size() - 1;
		}
	}
	
}

start returns [ org.eclipse.emf.ecore.EObject element = null]
:
	{
		// follow set for start rule(s)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_0, 0, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_0);
		expectedElementsIndexOfLastCompleteElement = 0;
	}
	(
		c0 = parse_OrchestrationLanguage_Modules{ element = c0; }
	)
	EOF	{
		retrieveLayoutInformation(element, null, null, false);
	}
	
;

parse_OrchestrationLanguage_Variable_005fAssignment returns [OrchestrationLanguage.Variable_Assignment element = null]
@init{
}
:
	a0 = 'Variable_Assignment' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_2, 1);
	}
	
	a1 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_3, 2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_4, 2);
	}
	
	(
		(
			a2 = 'assign' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_2_0_0_0, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_5, 3);
			}
			
			a3 = ':' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_2_0_0_1, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_6, 4);
			}
			
			(
				a4 = TEXT				
				{
					if (terminateParsing) {
						throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
					}
					if (element == null) {
						element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
						incompleteObjects.push(element);
					}
					if (a4 != null) {
						OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
						tokenResolver.setOptions(getOptions());
						OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
						tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_ASSIGNMENT__ASSIGN), result);
						Object resolvedObject = result.getResolvedToken();
						if (resolvedObject == null) {
							addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStopIndex());
						}
						String resolved = (String) resolvedObject;
						OrchestrationLanguage.Variable proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
						collectHiddenTokens(element);
						registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Variable_Assignment, OrchestrationLanguage.Variable>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getVariable_AssignmentAssignReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_ASSIGNMENT__ASSIGN), resolved, proxy);
						if (proxy != null) {
							Object value = proxy;
							element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_ASSIGNMENT__ASSIGN), value);
							completedElement(value, false);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_2_0_0_2, proxy, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, element);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, proxy);
					}
				}
			)
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_3, 5);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_4, 5);
			}
			
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_3, 6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_4, 6);
	}
	
	a5 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Assignment();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_0_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a5, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 7, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 7, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 7, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 7, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 7, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 7);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 7);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 7);
	}
	
;

parse_OrchestrationLanguage_Variable_005fDeclaration returns [OrchestrationLanguage.Variable_Declaration element = null]
@init{
}
:
	a0 = 'Variable_Declaration' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_14, 8);
	}
	
	a1 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_15, 9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_16, 9);
	}
	
	(
		(
			a2 = 'declare' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_2_0_0_0, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_17, 10);
			}
			
			a3 = ':' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_2_0_0_1, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_18, 11);
			}
			
			(
				a4 = TEXT				
				{
					if (terminateParsing) {
						throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
					}
					if (element == null) {
						element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
						incompleteObjects.push(element);
					}
					if (a4 != null) {
						OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
						tokenResolver.setOptions(getOptions());
						OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
						tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_DECLARATION__DECLARE), result);
						Object resolvedObject = result.getResolvedToken();
						if (resolvedObject == null) {
							addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStopIndex());
						}
						String resolved = (String) resolvedObject;
						OrchestrationLanguage.Variable proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
						collectHiddenTokens(element);
						registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Variable_Declaration, OrchestrationLanguage.Variable>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getVariable_DeclarationDeclareReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_DECLARATION__DECLARE), resolved, proxy);
						if (proxy != null) {
							Object value = proxy;
							element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE_DECLARATION__DECLARE), value);
							completedElement(value, false);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_2_0_0_2, proxy, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, element);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, proxy);
					}
				}
			)
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_15, 12);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_16, 12);
			}
			
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_15, 13);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_16, 13);
	}
	
	a5 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable_Declaration();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_1_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a5, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 14, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 14, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 14, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 14, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 14, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 14);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 14);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 14);
	}
	
;

parse_OrchestrationLanguage_Variable returns [OrchestrationLanguage.Variable element = null]
@init{
}
:
	a0 = 'Variable' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_20, 15);
	}
	
	a1 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_21, 16);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_22, 16);
	}
	
	(
		(
			a2 = 'name' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_2_0_0_0, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_23, 17);
			}
			
			a3 = ':' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_2_0_0_1, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_24, 18);
			}
			
			(
				a4 = QUOTED_34_34				
				{
					if (terminateParsing) {
						throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
					}
					if (element == null) {
						element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
						incompleteObjects.push(element);
					}
					if (a4 != null) {
						OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("QUOTED_34_34");
						tokenResolver.setOptions(getOptions());
						OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
						tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE__NAME), result);
						Object resolvedObject = result.getResolvedToken();
						if (resolvedObject == null) {
							addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStopIndex());
						}
						java.lang.String resolved = (java.lang.String) resolvedObject;
						if (resolved != null) {
							Object value = resolved;
							element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.VARIABLE__NAME), value);
							completedElement(value, false);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_2_0_0_2, resolved, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, element);
					}
				}
			)
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_21, 19);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_22, 19);
			}
			
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_21, 20);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_22, 20);
	}
	
	a5 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_2_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a5, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_19, 21, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_25, 21);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_26, 21);
	}
	
;

parse_OrchestrationLanguage_Modules returns [OrchestrationLanguage.Modules element = null]
@init{
}
:
	(
		(
			a0_0 = parse_OrchestrationLanguage_Module			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModules();
					incompleteObjects.push(element);
				}
				if (a0_0 != null) {
					if (a0_0 != null) {
						Object value = a0_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.MODULES__CONTAINS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_3_0_0_0, a0_0, true);
					copyLocalizationInfos(a0_0, element);
				}
			}
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_0, 22, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_0);
	}
	
;

parse_OrchestrationLanguage_Module returns [OrchestrationLanguage.Module element = null]
@init{
}
:
	a0 = 'module' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_27, 23);
	}
	
	(
		a1 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
				incompleteObjects.push(element);
			}
			if (a1 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.MODULE__NAME), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.MODULE__NAME), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_1, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a1, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_28, 24);
	}
	
	a2 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_2, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_29, 25, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_3);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 25, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 25, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 25, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 25);
	}
	
	(
		(
			a3_0 = parse_OrchestrationLanguage_Import			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
					incompleteObjects.push(element);
				}
				if (a3_0 != null) {
					if (a3_0 != null) {
						Object value = a3_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.MODULE__IMPORTS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_3, a3_0, true);
					copyLocalizationInfos(a3_0, element);
				}
			}
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_29, 26, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_3);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 26, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 26, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 26, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 26);
	}
	
	(
		(
			a4_0 = parse_OrchestrationLanguage_Service			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
					incompleteObjects.push(element);
				}
				if (a4_0 != null) {
					if (a4_0 != null) {
						Object value = a4_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.MODULE__PROVIDE, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_4, a4_0, true);
					copyLocalizationInfos(a4_0, element);
				}
			}
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 27, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 27, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 27, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 27);
	}
	
	a5 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_4_0_0_5, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a5, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_0, 28, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_0);
	}
	
;

parse_OrchestrationLanguage_Import returns [OrchestrationLanguage.Import element = null]
@init{
}
:
	a0 = 'import' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createImport();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_5_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_34, 29);
	}
	
	(
		a1 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createImport();
				incompleteObjects.push(element);
			}
			if (a1 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IMPORT__REFERENCES), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStopIndex());
				}
				String resolved = (String) resolvedObject;
				OrchestrationLanguage.Module proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createModule();
				collectHiddenTokens(element);
				registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Import, OrchestrationLanguage.Module>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getImportReferencesReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IMPORT__REFERENCES), resolved, proxy);
				if (proxy != null) {
					Object value = proxy;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IMPORT__REFERENCES), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_5_0_0_1, proxy, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a1, element);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a1, proxy);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_35, 30);
	}
	
	a2 = ';' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createImport();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_5_0_0_2, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_29, 31, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_3);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 31, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 31, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 31, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 31);
	}
	
;

parse_OrchestrationLanguage_ExternalServices returns [OrchestrationLanguage.ExternalServices element = null]
@init{
}
:
	a0 = 'service' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_36, 32);
	}
	
	(
		a1 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
				incompleteObjects.push(element);
			}
			if (a1 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.EXTERNAL_SERVICES__NAME), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a1).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.EXTERNAL_SERVICES__NAME), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_1, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a1, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_37, 33);
	}
	
	a2 = '@' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_2, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a2, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_38, 34);
	}
	
	(
		a3 = QUOTED_60_62		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
				incompleteObjects.push(element);
			}
			if (a3 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("QUOTED_60_62");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a3.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.EXTERNAL_SERVICES__LOCATION), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a3).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a3).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a3).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a3).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.EXTERNAL_SERVICES__LOCATION), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_3, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a3, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_39, 35);
	}
	
	a4 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_4, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a4, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_40, 36, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 36, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
	}
	
	(
		(
			a5_0 = parse_OrchestrationLanguage_Process			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
					incompleteObjects.push(element);
				}
				if (a5_0 != null) {
					if (a5_0 != null) {
						Object value = a5_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.EXTERNAL_SERVICES__OPERATIONS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_5, a5_0, true);
					copyLocalizationInfos(a5_0, element);
				}
			}
		)
		
	)+	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_40, 37, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 37, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_42, 37);
	}
	
	a6 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_6_0_0_6, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a6, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 38, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 38, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 38, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 38);
	}
	
;

parse_OrchestrationLanguage_InternalServices returns [OrchestrationLanguage.InternalServices element = null]
@init{
}
:
	(
		(
			a0_0 = parse_OrchestrationLanguage_Main			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
					incompleteObjects.push(element);
				}
				if (a0_0 != null) {
					if (a0_0 != null) {
						Object value = a0_0;
						element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__MAIN), value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_0, a0_0, true);
					copyLocalizationInfos(a0_0, element);
				}
			}
		)
		
	)?	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 39);
	}
	
	a1 = 'service' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_43, 40);
	}
	
	(
		a2 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
				incompleteObjects.push(element);
			}
			if (a2 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__NAME), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__NAME), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_2, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_44, 41);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_45, 41);
	}
	
	(
		(
			a3 = 'uses' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_3_0_0_0, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_46, 42);
			}
			
			(
				(
					a4 = TEXT					
					{
						if (terminateParsing) {
							throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
						}
						if (element == null) {
							element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
							incompleteObjects.push(element);
						}
						if (a4 != null) {
							OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
							tokenResolver.setOptions(getOptions());
							OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
							tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__USES), result);
							Object resolvedObject = result.getResolvedToken();
							if (resolvedObject == null) {
								addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a4).getStopIndex());
							}
							String resolved = (String) resolvedObject;
							OrchestrationLanguage.Service proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createExternalServices();
							collectHiddenTokens(element);
							registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.InternalServices, OrchestrationLanguage.Service>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getInternalServicesUsesReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__USES), resolved, proxy);
							if (proxy != null) {
								Object value = proxy;
								addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__USES, value);
								completedElement(value, false);
							}
							collectHiddenTokens(element);
							retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_3_0_0_1, proxy, true);
							copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, element);
							copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a4, proxy);
						}
					}
				)
				
			)+			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_46, 43);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_45, 43);
			}
			
		)
		
	)?	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_45, 44);
	}
	
	a5 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_4, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a5, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 45, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_7);
	}
	
	(
		(
			a6_0 = parse_OrchestrationLanguage_InternalProcess			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
					incompleteObjects.push(element);
				}
				if (a6_0 != null) {
					if (a6_0 != null) {
						Object value = a6_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_SERVICES__INTERNAL_OPERATIONS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_5, a6_0, true);
					copyLocalizationInfos(a6_0, element);
				}
			}
		)
		
	)+	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 46, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_7);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_47, 46);
	}
	
	a7 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalServices();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_7_0_0_6, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a7, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_30, 47, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_31, 47, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_5, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 47, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_4);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_33, 47);
	}
	
;

parse_OrchestrationLanguage_Main returns [OrchestrationLanguage.Main element = null]
@init{
}
:
	a0 = 'main' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createMain();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_8_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_32, 48);
	}
	
;

parse_OrchestrationLanguage_Process returns [OrchestrationLanguage.Process element = null]
@init{
}
:
	(
		a0 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createProcess();
				incompleteObjects.push(element);
			}
			if (a0 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.PROCESS__NAME), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.PROCESS__NAME), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_9_0_0_0, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_48, 49);
	}
	
	a1 = '(' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_9_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_19, 50, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_25, 50);
	}
	
	(
		(
			a2_0 = parse_OrchestrationLanguage_Variable			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createProcess();
					incompleteObjects.push(element);
				}
				if (a2_0 != null) {
					if (a2_0 != null) {
						Object value = a2_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.PROCESS__PARAMETERS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_9_0_0_2, a2_0, true);
					copyLocalizationInfos(a2_0, element);
				}
			}
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_19, 51, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_25, 51);
	}
	
	a3 = ');' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_9_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_40, 52, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 52, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_42, 52);
	}
	
	|//derived choice rules for sub-classes: 
	
	c0 = parse_OrchestrationLanguage_InternalProcess{ element = c0; /* this is a subclass or primitive expression choice */ }
	
;

parse_OrchestrationLanguage_InternalProcess returns [OrchestrationLanguage.InternalProcess element = null]
@init{
}
:
	(
		a0 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
				incompleteObjects.push(element);
			}
			if (a0 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_PROCESS__NAME), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_PROCESS__NAME), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_0, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_49, 53);
	}
	
	a1 = '(' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_19, 54, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_26, 54);
	}
	
	(
		(
			a2_0 = parse_OrchestrationLanguage_Variable			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
					incompleteObjects.push(element);
				}
				if (a2_0 != null) {
					if (a2_0 != null) {
						Object value = a2_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_PROCESS__PARAMETERS, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_2, a2_0, true);
					copyLocalizationInfos(a2_0, element);
				}
			}
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_19, 55, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_2);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_26, 55);
	}
	
	a3 = ')' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_50, 56);
	}
	
	a4 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_4, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a4, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 57, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 57, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 57, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 57, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 57, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
	}
	
	(
		(
			a5_0 = parse_OrchestrationLanguage_Command			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
					incompleteObjects.push(element);
				}
				if (a5_0 != null) {
					if (a5_0 != null) {
						Object value = a5_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.INTERNAL_PROCESS__SEQUENCE, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_5, a5_0, true);
					copyLocalizationInfos(a5_0, element);
				}
			}
		)
		
	)+	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 58, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 58, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 58, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 58, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 58, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 58);
	}
	
	a6 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createInternalProcess();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_10_0_0_6, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a6, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_40, 59, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_41, 59, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_6);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_42, 59);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_47, 59);
	}
	
;

parse_OrchestrationLanguage_Call returns [OrchestrationLanguage.Call element = null]
@init{
}
:
	(
		a0 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createCall();
				incompleteObjects.push(element);
			}
			if (a0 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.CALL__TARGET), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStopIndex());
				}
				String resolved = (String) resolvedObject;
				OrchestrationLanguage.Process proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createProcess();
				collectHiddenTokens(element);
				registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Call, OrchestrationLanguage.Process>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getCallTargetReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.CALL__TARGET), resolved, proxy);
				if (proxy != null) {
					Object value = proxy;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.CALL__TARGET), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_11_0_0_0, proxy, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, element);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, proxy);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_51, 60);
	}
	
	a1 = '(' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createCall();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_11_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_52, 61);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_53, 61);
	}
	
	(
		(
			a2 = TEXT			
			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createCall();
					incompleteObjects.push(element);
				}
				if (a2 != null) {
					OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
					tokenResolver.setOptions(getOptions());
					OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
					tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.CALL__INPUT), result);
					Object resolvedObject = result.getResolvedToken();
					if (resolvedObject == null) {
						addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStopIndex());
					}
					String resolved = (String) resolvedObject;
					OrchestrationLanguage.Argument proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
					collectHiddenTokens(element);
					registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Call, OrchestrationLanguage.Argument>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getCallInputReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.CALL__INPUT), resolved, proxy);
					if (proxy != null) {
						Object value = proxy;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.CALL__INPUT, value);
						completedElement(value, false);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_11_0_0_2, proxy, true);
					copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, element);
					copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, proxy);
				}
			}
		)
		
	)?	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_53, 62);
	}
	
	a3 = ');' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createCall();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_11_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 63, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 63, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 63, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 63, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 63, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 63);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 63);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 63);
	}
	
;

parse_OrchestrationLanguage_Argument returns [OrchestrationLanguage.Argument element = null]
@init{
}
:
	(
		(
			(
				a0 = TEXT				
				{
					if (terminateParsing) {
						throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
					}
					if (element == null) {
						element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
						incompleteObjects.push(element);
					}
					if (a0 != null) {
						OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
						tokenResolver.setOptions(getOptions());
						OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
						tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_TO), result);
						Object resolvedObject = result.getResolvedToken();
						if (resolvedObject == null) {
							addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a0).getStopIndex());
						}
						String resolved = (String) resolvedObject;
						OrchestrationLanguage.Variable proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
						collectHiddenTokens(element);
						registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Argument, OrchestrationLanguage.Variable>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getArgumentAssignToReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_TO), resolved, proxy);
						if (proxy != null) {
							Object value = proxy;
							element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_TO), value);
							completedElement(value, false);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_12_0_0_0_0_0_0, proxy, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, element);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a0, proxy);
					}
				}
			)
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_55, 64);
			}
			
			a1 = '=' {
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
					incompleteObjects.push(element);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_12_0_0_0_0_0_1, null, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
			}
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_56, 65);
			}
			
			(
				a2 = TEXT				
				{
					if (terminateParsing) {
						throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
					}
					if (element == null) {
						element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
						incompleteObjects.push(element);
					}
					if (a2 != null) {
						OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
						tokenResolver.setOptions(getOptions());
						OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
						tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_FROM), result);
						Object resolvedObject = result.getResolvedToken();
						if (resolvedObject == null) {
							addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStopIndex());
						}
						String resolved = (String) resolvedObject;
						OrchestrationLanguage.Variable proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createVariable();
						collectHiddenTokens(element);
						registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.Argument, OrchestrationLanguage.Variable>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getArgumentAssignFromReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_FROM), resolved, proxy);
						if (proxy != null) {
							Object value = proxy;
							element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.ARGUMENT__ASSIGN_FROM), value);
							completedElement(value, false);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_12_0_0_0_0_0_2, proxy, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, element);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, proxy);
					}
				}
			)
			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_57, 66);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_54, 66);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_58, 66);
			}
			
			(
				(
					a3 = ',' {
						if (element == null) {
							element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
							incompleteObjects.push(element);
						}
						collectHiddenTokens(element);
						retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_12_0_0_0_0_0_3_0_0_0, null, true);
						copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
					}
					{
						// expected elements (follow set)
						addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_54, 67);
						addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_58, 67);
					}
					
				)
				
			)?			{
				// expected elements (follow set)
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_54, 68);
				addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_58, 68);
			}
			
		)
		
	)*	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_54, 69);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_58, 69);
	}
	
	a4 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createArgument();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_12_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a4, element);
	}
	{
		// expected elements (follow set)
	}
	
;

parse_OrchestrationLanguage_If returns [OrchestrationLanguage.If element = null]
@init{
}
:
	a0 = 'if' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_59, 71);
	}
	
	a1 = '(' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_60, 72);
	}
	
	(
		a2 = TEXT		
		{
			if (terminateParsing) {
				throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
			}
			if (element == null) {
				element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
				incompleteObjects.push(element);
			}
			if (a2 != null) {
				OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
				tokenResolver.setOptions(getOptions());
				OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
				tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IF__CONDITION), result);
				Object resolvedObject = result.getResolvedToken();
				if (resolvedObject == null) {
					addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a2).getStopIndex());
				}
				java.lang.String resolved = (java.lang.String) resolvedObject;
				if (resolved != null) {
					Object value = resolved;
					element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IF__CONDITION), value);
					completedElement(value, false);
				}
				collectHiddenTokens(element);
				retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_2, resolved, true);
				copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a2, element);
			}
		}
	)
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_61, 73);
	}
	
	a3 = ')' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_62, 74);
	}
	
	a4 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_4, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a4, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 75, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 75, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 75, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 75, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 75, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
	}
	
	(
		(
			a5_0 = parse_OrchestrationLanguage_Command			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
					incompleteObjects.push(element);
				}
				if (a5_0 != null) {
					if (a5_0 != null) {
						Object value = a5_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.IF__IF_EXECUTE, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_5, a5_0, true);
					copyLocalizationInfos(a5_0, element);
				}
			}
		)
		
	)+	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 76, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 76, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 76, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 76, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 76, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_8);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 76);
	}
	
	a6 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_6, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a6, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_63, 77);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 77, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 77, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 77, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 77, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 77, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 77);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 77);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 77);
	}
	
	(
		(
			a7 = TEXT			
			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createIf();
					incompleteObjects.push(element);
				}
				if (a7 != null) {
					OrchestrationLanguage.resource.ol.IOlTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("TEXT");
					tokenResolver.setOptions(getOptions());
					OrchestrationLanguage.resource.ol.IOlTokenResolveResult result = getFreshTokenResolveResult();
					tokenResolver.resolve(a7.getText(), element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IF__ELSE), result);
					Object resolvedObject = result.getResolvedToken();
					if (resolvedObject == null) {
						addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_3_0.CommonToken) a7).getLine(), ((org.antlr.runtime3_3_0.CommonToken) a7).getCharPositionInLine(), ((org.antlr.runtime3_3_0.CommonToken) a7).getStartIndex(), ((org.antlr.runtime3_3_0.CommonToken) a7).getStopIndex());
					}
					String resolved = (String) resolvedObject;
					OrchestrationLanguage.Else proxy = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createElse();
					collectHiddenTokens(element);
					registerContextDependentProxy(new OrchestrationLanguage.resource.ol.mopp.OlContextDependentURIFragmentFactory<OrchestrationLanguage.If, OrchestrationLanguage.Else>(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getIfElseReferenceResolver()), element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IF__ELSE), resolved, proxy);
					if (proxy != null) {
						Object value = proxy;
						element.eSet(element.eClass().getEStructuralFeature(OrchestrationLanguage.OrchestrationLanguagePackage.IF__ELSE), value);
						completedElement(value, false);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_13_0_0_7, proxy, true);
					copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a7, element);
					copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken) a7, proxy);
				}
			}
		)
		
	)?	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 78, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 78, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 78, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 78, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 78, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 78);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 78);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 78);
	}
	
;

parse_OrchestrationLanguage_Else returns [OrchestrationLanguage.Else element = null]
@init{
}
:
	a0 = 'else' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createElse();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_14_0_0_0, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a0, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_64, 79);
	}
	
	a1 = '{' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createElse();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_14_0_0_1, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a1, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 80, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 80, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 80, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 80, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 80, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
	}
	
	(
		(
			a2_0 = parse_OrchestrationLanguage_Command			{
				if (terminateParsing) {
					throw new OrchestrationLanguage.resource.ol.mopp.OlTerminateParsingException();
				}
				if (element == null) {
					element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createElse();
					incompleteObjects.push(element);
				}
				if (a2_0 != null) {
					if (a2_0 != null) {
						Object value = a2_0;
						addObjectToList(element, OrchestrationLanguage.OrchestrationLanguagePackage.ELSE__ELSE_EXECUTE, value);
						completedElement(value, true);
					}
					collectHiddenTokens(element);
					retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_14_0_0_2, a2_0, true);
					copyLocalizationInfos(a2_0, element);
				}
			}
		)
		
	)+	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 81, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 81, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 81, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 81, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 81, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_9);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 81);
	}
	
	a3 = '}' {
		if (element == null) {
			element = OrchestrationLanguage.OrchestrationLanguageFactory.eINSTANCE.createElse();
			incompleteObjects.push(element);
		}
		collectHiddenTokens(element);
		retrieveLayoutInformation(element, OrchestrationLanguage.resource.ol.grammar.OlGrammarInformationProvider.OL_14_0_0_3, null, true);
		copyLocalizationInfos((org.antlr.runtime3_3_0.CommonToken)a3, element);
	}
	{
		// expected elements (follow set)
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_1, 82, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_7, 82, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_8, 82, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_9, 82, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_10, 82, OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.FEATURE_1);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_11, 82);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_12, 82);
		addExpectedElement(OrchestrationLanguage.resource.ol.grammar.OlFollowSetProvider.TERMINAL_13, 82);
	}
	
;

parse_OrchestrationLanguage_Service returns [OrchestrationLanguage.Service element = null]
:
	c0 = parse_OrchestrationLanguage_ExternalServices{ element = c0; /* this is a subclass or primitive expression choice */ }
	|	c1 = parse_OrchestrationLanguage_InternalServices{ element = c1; /* this is a subclass or primitive expression choice */ }
	
;

parse_OrchestrationLanguage_Command returns [OrchestrationLanguage.Command element = null]
:
	c0 = parse_OrchestrationLanguage_Variable_005fAssignment{ element = c0; /* this is a subclass or primitive expression choice */ }
	|	c1 = parse_OrchestrationLanguage_Variable_005fDeclaration{ element = c1; /* this is a subclass or primitive expression choice */ }
	|	c2 = parse_OrchestrationLanguage_Call{ element = c2; /* this is a subclass or primitive expression choice */ }
	|	c3 = parse_OrchestrationLanguage_If{ element = c3; /* this is a subclass or primitive expression choice */ }
	|	c4 = parse_OrchestrationLanguage_Else{ element = c4; /* this is a subclass or primitive expression choice */ }
	
;

COMMENT:
	('//'(~('\n'|'\r'|'\uffff'))*)
	{ _channel = 99; }
;
INTEGER:
	(('-')?('1'..'9')('0'..'9')*|'0')
	{ _channel = 99; }
;
FLOAT:
	(('-')?(('1'..'9') ('0'..'9')* | '0') '.' ('0'..'9')+ )
	{ _channel = 99; }
;
TEXT:
	(('A'..'Z' | 'a'..'z' | '0'..'9' | '_' | '-' )+)
;
WHITESPACE:
	((' ' | '\t' | '\f'))
	{ _channel = 99; }
;
LINEBREAK:
	(('\r\n' | '\r' | '\n'))
	{ _channel = 99; }
;
QUOTED_34_34:
	(('"')(~('"'))*('"'))
;
QUOTED_60_62:
	(('<')(~('>'))*('>'))
;

